#include "Texture.h"

using namespace std;

namespace glow
{
    /*constructeurs*/

    /*Constructeur de la classe Texture
    prend en parametre : - un string contenant l'adresse exacte de l'image source (.jpeg, .png...)
                         - un char * qui contient les couleurs de la texture
                         */
     Texture::Texture(string str) : _nom(str)
    {
        load();
            _identTexture = loadTexture(_nom);
    }


    /*destructeur*/

    /*Destructeur de la classe Texture*/
     Texture::~Texture()
    {
        if(_colorTab != null)
            delete _colorTab;
    }

    /*mutateurs*/

    /*Mutateur de l'attribut m_nom : string
    Prend en parametre la nouvelle adresse de l'image source (.jpeg, .png...)
    -- met a jour m_identTexture : GLuint
    */
     void Texture::setNom(string str)
    {
        //si l'image source n'est pas deja celle en memoire
        if(str != _nom)
        {
            _nom = str;
            //on met a jour le GLuint
            setIdentTexture();
        }
    }

    /*Mutateur de l'attribut m_colorTab : char *
    Prend en parametre le tableau de char a copier dans m_colorTab
    m_colorTab est delete afin d'eviter les pertes de memoires, puis le tableau en parametre est copie case par case dans l'attribut m_colorTab
    */
     void Texture::setColorTab(char * tab)
    {
        //on vide le tableau afin d'eviter toute perte de memoire
        if(_colorTab != null)
            delete _colorTab;

        //on recree le tableau a taille voulue
        _colorTab = new char[strlen(chaine)];
        //on copie integralement le tableau parametre
        for(int i = 0; i < strlen(chaine) ; i++)
            _colorTab[i] = chaine[i];
    }

    /*Mutateur de l'attribut m_identTexture : GLuint
    Met a jour le GLuint par rapport a l'attribut m_nom : string
    */
     void Texture::setIdentTexture()
    {
        _identTexture = loadTexture(_nom);
    }

    /*accesseurs*/

    /*Accesseur de l'attribut m_nom : string
    Renvoi l'adresse exacte de l'image source (.jpeg, .png...)
    */
     string Texture::getNom()
    {
        return _nom;
    }

    /*Accesseur de l'attribut m_colorTab : char *
    Renvoi le tableau de couleur de la texture
    */
     char * Texture::getColorTab()
    {
        return _colorTab;
    }

    /*Accesseur de l'attribut m_identTexture : GLuint
    Renvoi l'identifiant de la texture
    */
     GLuint Texture::getIdentTexture()
    {
        return _identTexture;
    }


    /*fonctions membres*/

    void Texture::load()
    {
        int channels;
        _colorTab = SOIL_load_image
        (
            filename,
            &_size.X, &_size.Y, &channels,
            SOIL_LOAD_AUTO
        );

        GLuint _identTexture = SOIL_create_OGL_texture
        (
            _colorTab,
            _size.X, _size.Y, channels,
            SOIL_CREATE_NEW_ID,
            SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT
        );

        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

    }

}//namespace glow
